package com.bawei.hgshop.service.impl;

import java.util.List;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;

import com.bawei.hgshop.entity.Sku;
import com.bawei.hgshop.entity.SkuVo;
import com.bawei.hgshop.entity.SpecOption;
import com.bawei.hgshop.entity.SpuVo;
import com.bawei.hgshop.mapper.SkuMapper;
import com.bawei.hgshop.service.SkuService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

@Service(interfaceClass = SkuService.class)
public class SkuServiceImpl  implements SkuService{
	
	@Autowired
	SkuMapper skuMapper;

	@Override
	public int add(Sku sku) {
		// TODO Auto-generated method stub
		//先添加主表
		int n  = skuMapper.addSku(sku);
		//添加子表
		sku.getSpecOptions().forEach(x->{
			skuMapper.addSkuOptions(sku.getId(),x);
		});
		return n;
	}

	@Override
	public PageInfo<Sku> list(SkuVo skuVo) {
		// TODO Auto-generated method stub
		PageHelper.startPage(skuVo.getPage(), skuVo.getPageSize());
		return new PageInfo<Sku>(skuMapper.list(skuVo));
	}

	@Override
	public Sku findById(int id) {
		// TODO Auto-generated method stub
		return skuMapper.findById(id);
	}

	@Override
	public int update(Sku sku) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Sku listBySpec(SpuVo spuVo) {
		
		// 根据spu 获取这个sku 所有的id 的数组
		List<Integer> idsListall = skuMapper.listIdbySpuId(spuVo.getId());
		
		
		// TODO Auto-generated method stub
		for (SpecOption op : spuVo.getOptions()) {
			
			List<Integer> idsList =  skuMapper.listBySpuOption(spuVo.getId(),op.getId(),op.getSpecId());
			// 求交集 也就是idsListall 中保留下下idsList中的元素
			idsListall.retainAll(idsList);
		}
		
		//得到唯一的元素 也就是唯一的sku  否则认为没有得到唯一的sku  或者没有 或者是多个
		if(idsListall!=null && idsListall.size()==1) {
			return skuMapper.findById(idsListall.get(0));
		}else {
			return null;
		}
		
		//return skuMapper.listBySpec(spuVo);
	}
	

}
